<?php
// $Id$

/**
 * Controller_Tasks 控制器
 */
class Controller_Tasks extends Controller_Abstract
{

	function actionIndex()
	{
        $page = intval($this->_context->page);
		if ($page < 1) $page = 1;
		
		$select = Task::find('owner_id = ?', $this->_app->currentUserObject()->id());
		$select->limitPage($page, 5);
		
		$this->_view['pagination'] = $select->getPagination();
		$this->_view['tasks']      = $select->getAll();
	}
	function actionCreate()
	{
		$form = new Form_Task(url('tasks/create'));
		
		if ($this->_context->isPOST() && $form->validate($_POST))
		{
			$user = $this->_app->currentUserObject();
			
			$task = $user->createTask($form['subject']->value, $form['description']->value);
			
			$task->save();
			return $this->_redirect(url('tasks/index'));
		}
		$this->_view['form'] = $form;
	}
	function actionEdit()
	{
		// 查询指定 ID，并且其所有者是当前用户的任务（禁止修改他人的任务）
		$task = Task::find('task_id = ? AND [owner.user_id] = ?',
			$this->_context->task_id,
			$this->_app->currentUserObject()->id())->query();
	 
		if (!$task->id())
		{
			// 如果任务的 ID 无效，视图修改的任务不存在或者不是当前用户创建的
			return $this->_redirect(url('tasks/index'));
		}
	 
		// 构造表单对象
		$form = new Form_Task(url('tasks/edit'));
		// 修改表单标题
		$form->_subject = '编辑任务';
		// 添加一个 checkbox 到表单
		$form->add(QForm::ELEMENT, 'is_completed', array(
			'_ui'              => 'checkbox',
			'checked_by_value' => true,
			'caption'          => '该任务已完成',
		));
		// 添加一个隐藏字段到表单
		$form->add(QForm::ELEMENT, 'task_id', array('_ui' => 'hidden'));
	 
		if ($this->_context->isPOST() && $form->validate($_POST))
		{
			// changeProps() 方法可以批量修改 task 对象的属性，但不会修改只读属性的值
			$task->changeProps($form->values());
			// 根据是否选中“已完成”检查框来设置任务的状态
			$task->completed($form['is_completed']->value);
	 
			// 保存并重定向浏览器
			$task->save();
		   return $this->_redirect(url('tasks/index'));
		}
		elseif (!$this->_context->isPOST())
		{
			// 如果不是 POST 提交，则把对象值导入表单
			$form->import($task);
		}
	 
		$this->_view['form'] = $form;
		// 重用 create 动作的视图
		$this->_viewname = 'create';
	}
	function actionDelete()
	{
		// destroyWhere() 方法的参数和 find() 方法完全一致
		Task::meta()->destroyWhere('task_id = ? AND [owner.user_id] = ?',
			$this->_context->task_id,
			$this->_app->currentUserObject()->id());
	 
		return $this->_redirectMessage(
			'删除成功',
			'您已经成功删除了一个任务',
			url('tasks/index'));
	}
}


